package com.turbo;

import java.util.Set;

/**
 * 实现处理大文件
 * 通过内存映射，多个线程分区读取文件内容，且每个线程
 * 读取的分区结束都以换行符或者回车符结束。
 * 特适合处理csv文件
 * @author: zwx
 * @time: 2021/4/27 20:35
 */
public class Main {

    public static void main(String[] args) {
        BigFileReader.Builder builder = new BigFileReader.Builder("D:/test.csv", new IHandle() {

            @Override
            public void handle(String line) {
                String enComma = ",";
                String[] split = line.split(enComma);
                System.out.println(new Person().setName(split[0]).setAge(split[1]).setGender(split[2]));
            }

            @Override
            public void handleSet(Set<Person> personSet) {
                // 对其导入数据库操作 或者 其他操作
            }
        });
        // 线程数、缓存大小 根据实际业务情况来定
        BigFileReader bigFileReader = builder.setThreadSize(6).setBufferSize(100).setCharSet("utf-8").build();
        bigFileReader.start();
    }

}
